package com.sicheng.lc.lc笔试.神策篇;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/8/21 20:53
 */
public class 构造期待 {
    /**
     * 声明：原题目并不叫这个我只是利用大致题意捏的
     * 题目大致描述如下
     * 连续n天的股票价格
     * a1 a2 a3 .... an
     * 找到2支股满足: (股票价格之和 - 与相距天数) 最大
     * 大致思路：
     *  题意也就是：j > i,  max{ aj + ai - (j - i) }
     *  等价转化并构造出： x = aj -j + ai + i
     *  这样在跑一遍时  当前的  aj - j是固定的 只需要找到以前最大的ai + i,那么当前的x最大
     *  相当于是对以前的一个期待， 期待一个最大的 ai + i
     *  构造完x，那么很容易想到使用大顶堆保存 当前遍历元素 aj + j
     *
     *
     *  类似的：对于哈西专题经常有这种期待比如当前有前缀和，期待一下以前的某个前缀和来满足题目要求的某种性质
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        String s = sc.nextLine();
        String[] ss = s.split(" ");
        int[] a = new int[n];
        for (int i = 0; i < ss.length; i++) {
            a[i] = Integer.parseInt(ss[i]);
        }

        PriorityQueue<Integer> q = new PriorityQueue<>(Comparator.reverseOrder());
        int x = -1;
        for (int j = 0; j < a.length; j++) {
            if (!q.isEmpty()) {
                x = Math.max(q.peek() + a[j] - j, x);
            }
            q.offer(a[j] + j);
        }

        System.out.println(x);


    }
}
